Mi è capitato di dover implementare un sistema che, ad una determinata selezione effettuata sul centralino 3CX di un cliente, inviasse al chiamante un SMS con il link per effettuare una prenotazione online.
Ovviamente, l’sms doveva partire solo nel caso in cui il chiamante fosse un numero di rete mobile, e nel caso si trattasse di un numero fisso, la chiamata andava trattata diversamente.
Per questo progetto ho deciso di utilizzare la piattaforma Skebby che mente a disposizione delle API per effettuare le operazioni necessarie, ha una buona documentazione e rientrava anche nei budget di costi per sms scelti.
Il progetto si divide in due parti:
- Pagina PHP che accetta richieste POST ed utilizza le API per inviare la richiesta a Skebby
- Progetto con CFD (Call Flow Designer) di 3CX per gestire la chiamata in ingresso
PAGINA PHP
Come prima cosa vi inserisco il codice PHP utilizzato, ovviamente dovrete inserire le vostre credenziali nella configurazione, username e password per le API di Skebby:
<?php
define("BASEURL", "https://api.skebby.it/API/v1.0/REST/");
define("MESSAGE_HIGH_QUALITY", "GP");
define("MESSAGE_MEDIUM_QUALITY", "TI");
define("MESSAGE_LOW_QUALITY", "SI");
//Messaggio da inviare
$msg = "Per prenotare visita il link: https://wtools.info ";
//Numero del destinatario del messaggio, ricevuto tramite richiesta POST
$dest = $_POST["dest"];
/**
* Autentica l'utente con Username e password.
* Restituisce la coppia user_key, Session_key
*/
function login($username, $password) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, BASEURL .
'login?username=' . $username .
'&password=' . $password);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ($info['http_code'] != 200) {
return null;
}
return explode(";", $response);
}
/**
* Funzione che invia un messaggio SMS
*/
function sendSMS($auth, $sendSMS) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, BASEURL . 'sms');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-type: application/json',
'user_key: ' . $auth[0],
'Session_key: ' . $auth[1]
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($sendSMS));
$response = curl_exec($ch);
echo $response;
$info = curl_getinfo($ch);
curl_close($ch);
if ($info['http_code'] != 201) {
return null;
}
return json_decode($response);
}
if(isset($dest)){
//Inserire qui sotto username e password di Skebby
$auth = login('USERNAME_SKEBBY', 'PASSWORD_SKEBBY');
//Richiamando la funzionalità qui sotto si può scegliere la
//Qualità del messaggio da inviare
//Ricordarsi che i messaggi di bassa qualità non prevedono il
//campo sender
$smsSent = sendSMS($auth, array(
"message" => $msg,
"message_type" => MESSAGE_MEDIUM_QUALITY,
"returnCredits" => true,
"recipient" => array($dest),
"sender" => 'Netdev'
));
if ($smsSent && $smsSent->result == "OK") {
echo 'SMS sent!';
// Piccolo log testuale sul file 3cx.htlm dei messaggi inviati
$myfile = fopen("3cx.html", "a");
$towr = "Messaggio Inviato " . $dest ." <br />";
fwrite($myfile, $towr);
fclose($myfile);
}else{
echo 'Errore<br >';
echo $smsSent->result;
}
}else{
echo "Non trovo il destinatario";
}
?>
Il codice si commenta da se (o meglio ho messo dei commenti per spiegare quel che fa.
Ricordatevi di impostare le vostre credenziali per accedere alle API di Skebby dove indicato e selezionare la qualità di messaggio che volete inviare (MESSAGE_HIGH_QUALITY/MESSAGE_MEDIUM_QUALITY/MESSAGE_LOW_QUALITY).
Questo file PHP andrà messo su una macchina web raggiungibile dal centralino 3CX che dovrà richiamarne le funzioni, ad esempio io l’ho chiamato send_sms.php
Ora un video di come realizzare il progetto di Call Flow Designer, che permetterà di distinguere se la chiamata in arrivo proviene da un numero di rete mobile (numero che inizia con 3) o da un numero di rete fissa (numero che inizia con 0).